package com.cn.algorithm01;

/**
 * @author hels
 * @version 1.0
 * @date 2021/10/14 10:12
 * 通过创建long数组，利用位图进行数据存储
 * long是8个字节，64位
 */
public class Code13_BitMap1 {

    // 内部类
    public static class BitMap {

        private long[] bits;

        // 根据传入的最大值确定数组长度
        public BitMap(int max) {
            bits = new long[((max + 64) >> 6)];
        }

        // add数字，确定在数组的第几个的第几位，将其置为1
        public void add(int num) {
            bits[num >> 6] |= (1l << (num & 63));
        }

        // delete数字，在数组的第几个的第几位,将其置为0
        public void delete(int num) {
            bits[num >> 6] &= ~(1l << (num & 63));
        }

        // contains数字，确定是否含有某个数字
        public boolean contains(int num) {
            return (bits[num >> 6] & (1l << (num & 63))) != 0;
        }
    }

}
